﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Gra.Seguros.Servicio.Be;

namespace Gra.Seguros.Servicio.Dalc
{
    public class ClienteDalc : IDisposable
    {
        #region "Procedimientos Consultas"
            public List<ClienteBe> listar()
            {
                try
                {
                    List<ClienteBe> lst = new List<ClienteBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarCliente", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    ClienteBe obj = new ClienteBe();
                                    obj.cCliente = drListado.GetInt32(drListado.GetOrdinal("cCliente"));
                                    obj.dNomCliente = drListado.GetString(drListado.GetOrdinal("dNomCliente"));
                                    obj.dApeRazonCliente = drListado.GetString(drListado.GetOrdinal("dApeRazonCliente"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public List<ClienteBe> listarPersonaJuridica(string _cTipoDocumento, string _nNroDocumento)
            {
                try
                {
                    List<ClienteBe> lst = new List<ClienteBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarPersonaJuridicaxTipoNumDoc", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cTipoDocumento", SqlDbType.VarChar, 4).Value = _cTipoDocumento;
                        oCommand.Parameters.Add("@nNroDocumento", SqlDbType.VarChar, 15).Value = _nNroDocumento;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    ClienteBe obj = new ClienteBe();
                                    obj.cCliente = drListado.GetInt32(drListado.GetOrdinal("cCliente"));
                                    obj.TipoDocumento = new TipoDocumentoBe();
                                    obj.TipoDocumento.cTipoDocumento = drListado.GetString(drListado.GetOrdinal("cTipoDocumento"));
                                    obj.TipoDocumento.dTipoDocumento = drListado.GetString(drListado.GetOrdinal("dTipoDocumento"));
                                    obj.TipoPersona = new TipoPersonaBe();
                                    obj.TipoPersona.cTipoPersona = drListado.GetInt16(drListado.GetOrdinal("cTipoPersona"));
                                    obj.TipoPersona.dTipoPersona = drListado.GetString(drListado.GetOrdinal("dTipoPersona"));
                                    obj.nNroDocumento = drListado.GetString(drListado.GetOrdinal("nNroDocumento"));
                                    obj.TipoCliente = new TipoClienteBe();
                                    obj.TipoCliente.cTipoCliente = drListado.GetInt16(drListado.GetOrdinal("cTipoCliente"));
                                    obj.TipoCliente.dTipoCliente = drListado.GetString(drListado.GetOrdinal("dTipoCliente"));
                                    obj.dApeRazonCliente = drListado.GetString(drListado.GetOrdinal("dApeRazonCliente"));
                                    obj.dTelefDomicilio = drListado.GetString(drListado.GetOrdinal("dTelefDomicilio"));
                                    obj.dCorreoElectronico = drListado.GetString(drListado.GetOrdinal("dCorreoElectronico"));
                                    obj.GrupoSectorEconomico = new GrupoSectorEconomicoBe();
                                    obj.GrupoSectorEconomico.cGrupoSectorEconomico = drListado.GetInt32(drListado.GetOrdinal("cGrupoSectorEconomico"));
                                    obj.GrupoSectorEconomico.dGrupoSectorEconomico = drListado.GetString(drListado.GetOrdinal("dGrupoSectorEconomico"));
                                    obj.SectorEconomico = new SectorEconomicoBe();
                                    obj.SectorEconomico.cSectorEconomico = drListado.GetString(drListado.GetOrdinal("cSectorEconomico"));
                                    obj.SectorEconomico.dSectorEconomico = drListado.GetString(drListado.GetOrdinal("dSectorEconomico"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public List<ClienteBe> listarPersonaNatural(string _cTipoDocumento, string _nNroDocumento)
            {
                try
                {
                    List<ClienteBe> lst = new List<ClienteBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarPersonaNaturalxTipoNumDoc", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cTipoDocumento", SqlDbType.VarChar, 4).Value = _cTipoDocumento;
                        oCommand.Parameters.Add("@nNroDocumento", SqlDbType.VarChar, 15).Value = _nNroDocumento;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    ClienteBe obj = new ClienteBe();
                                    obj.cCliente = drListado.GetInt32(drListado.GetOrdinal("cCliente"));
                                    obj.TipoDocumento = new TipoDocumentoBe();
                                    obj.TipoDocumento.cTipoDocumento = drListado.GetString(drListado.GetOrdinal("cTipoDocumento"));
                                    obj.TipoDocumento.dTipoDocumento = drListado.GetString(drListado.GetOrdinal("dTipoDocumento"));
                                    obj.TipoPersona = new TipoPersonaBe();
                                    obj.TipoPersona.cTipoPersona = drListado.GetInt16(drListado.GetOrdinal("cTipoPersona"));
                                    obj.TipoPersona.dTipoPersona = drListado.GetString(drListado.GetOrdinal("dTipoPersona"));
                                    obj.nNroDocumento = drListado.GetString(drListado.GetOrdinal("nNroDocumento"));
                                    obj.TipoCliente = new TipoClienteBe();
                                    obj.TipoCliente.cTipoCliente = drListado.GetInt16(drListado.GetOrdinal("cTipoCliente"));
                                    obj.TipoCliente.dTipoCliente = drListado.GetString(drListado.GetOrdinal("dTipoCliente"));
                                    obj.fNacimiento = drListado.GetDateTime(drListado.GetOrdinal("fNacimiento"));
                                    obj.Genero = new GeneroBe();
                                    obj.Genero.cGenero = drListado.GetInt16(drListado.GetOrdinal("cGenero"));
                                    obj.Genero.dGenero = drListado.GetString(drListado.GetOrdinal("dGenero"));
                                    obj.Genero.sSigla = drListado.GetString(drListado.GetOrdinal("sSigla"));
                                    obj.EstadoCivil = new EstadoCivilBe();
                                    obj.EstadoCivil.cEstadoCivil = drListado.GetInt32(drListado.GetOrdinal("cEstadoCivil"));
                                    obj.EstadoCivil.dEstadoCivil = drListado.GetString(drListado.GetOrdinal("dEstadoCivil"));
                                    obj.EstadoCivil.nValor = drListado.GetInt16(drListado.GetOrdinal("nValor"));
                                    obj.dNomCliente = drListado.GetString(drListado.GetOrdinal("dNomCliente"));
                                    obj.dApeRazonCliente = drListado.GetString(drListado.GetOrdinal("dApeRazonCliente"));
                                    obj.dTelefDomicilio = drListado.GetString(drListado.GetOrdinal("dTelefDomicilio"));
                                    obj.dCorreoElectronico = drListado.GetString(drListado.GetOrdinal("dCorreoElectronico"));
                                    obj.Departamento = new DepartamentoBe();
                                    obj.Departamento.cDepartamento = drListado.GetInt32(drListado.GetOrdinal("cDepartamento"));
                                    obj.Departamento.dDepartamento = drListado.GetString(drListado.GetOrdinal("dDepartamento"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        #endregion

        #region "Constructor & Disposable"
            private bool _disposed = false;
            SqlConnection oCn = null;
            public ClienteDalc()
            {
                string strConnection = ConfigurationManager.ConnectionStrings["dbSeguros"].ConnectionString;
                oCn = new SqlConnection(strConnection);
                oCn.Open();
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (!_disposed)
                {
                    if (disposing)
                    {
                        //Dispose managed resources here. llamar componetes de conexion u otros.                        
                        if (oCn.State != ConnectionState.Closed)
                        {
                            oCn.Close();
                        }
                        oCn.Dispose();
                    }
                    //Disposed unmanaged resources here.
                    //set the _disposed flag to prevent subsequent disposals.
                    _disposed = true;
                }
            }
            //Finalization code.
            ~ClienteDalc()
            {
                Dispose(false);
            }
        #endregion
    }
}
